package 设计模式;

/**
 * @author shy_black
 * @date 2019/3/12 18:40
 * @Description:代理模式
 * 俩个子类共同实现一个接口，其中一个子类负责真实业务实现，
 * 另外一个子类完成辅助真实业务主题的操作
 */
interface IBuy {
    void buy();
}
//真实主题类
class realSub implements IBuy {

    @Override
    public void buy() {
        System.out.println("买一台mac");
    }
}
//代理类
class proxySub implements IBuy {
    //传入真实主题类（接口对象)
    private IBuy buyer;
    public proxySub(IBuy buyer) {
        this.buyer = buyer;
    }
    public void beforeBuy() {
        System.out.println("到店排队。。。");
    }

    @Override
    public void buy() {
        this.beforeBuy();
        //真实主题类完成真实操作
        this.buyer.buy();
        //
        this.afterbuy();
    }
    public void afterbuy() {
        System.out.println("发快递给客户。。。");
    }
}
public class 代理模式 {
    public static void main(String[] args) {
        IBuy buyer = new proxySub(new realSub());
        buyer.buy();
    }
}
